package com.silverbox.sweeporder.service.index;

import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;
import com.silverbox.core.result.CoreResponse;
import com.silverbox.shopper.entity.DiningArea;
import com.silverbox.shopper.entity.ShopperConfig;
import com.silverbox.shopper.entity.ShopperExtend;
import com.silverbox.shopper.entity.ShopperNotice;
import com.silverbox.shopper.entity.ThirdUserInfo;
import com.silverbox.shopper.entity.extend.ShopperActivities;
import com.silverbox.sweeporder.controller.index.configvo.DecorationVO;
import com.silverbox.sweeporder.controller.index.entryvo.SavePeopleNumVO;
import com.silverbox.sweeporder.controller.index.entryvo.ShowPeopleNumberVO;
import com.silverbox.sweeporder.controller.index.vo.AlipayMarketingTriggerVO;
import com.silverbox.sweeporder.controller.index.vo.AppointmentTimeVO;
import com.silverbox.sweeporder.controller.index.vo.CallServiceInfoCVO;
import com.silverbox.sweeporder.controller.index.vo.MemberInfoVO;
import com.silverbox.sweeporder.controller.index.vo.QrcodeVO;
import com.silverbox.sweeporder.controller.index.vo.ReserveBasicInfoVO;
import com.silverbox.sweeporder.controller.index.vo.ShopperConfigExtend;
import com.silverbox.sweeporder.controller.index.vo.ShopperInfoVO;
import com.silverbox.sweeporder.controller.index.vo.ShopperVO;
import com.silverbox.sweeporder.controller.member.vo.EmployeeAuthRecordEntryVO;
import com.silverbox.sweeporder.controller.member.vo.FindEmployeeEntryVO;
import com.silverbox.sweeporder.controller.shopcart.entryvo.UserBaseDto;

/**
 * 主页基本业务接口
 * 
 * @author YTGHTGHS
 * @date 2017年12月13日
 * @description
 */
public interface IndexService {

	/**
	 * 获取店铺基本信息
	 *  
	 * @param  storeId      主店铺id
	 * @return ShopperVO  
	 * @author litao
	 * @date 2018年5月17日
	 */
	ShopperVO getShopper(Integer storeId);

	/**
	 * 获取店铺的所有配置信息
	 * 
	 * @param  storeId		主店铺id
	 * @return ShopperConfigVO  
	 * @author litao
	 * @date 2018年5月17日
	 */
	Map<String,Object> getConfigByShopperId(Integer storeId);

	/**
	 * 获取店铺单个配置信息(根据条件查询)
	 *  
	 * @param  storeId		子店铺id
	 * @param  propName		配置名称（数据库定义的propName字段名称）
	 * @return ShopperConfig  
	 * @author litao
	 * @date 2018年5月17日
	 */
	ShopperConfig getShopperConfig(Integer storeId, String propName);

	/**
	 * 获取店铺桌台信息(根据桌台id查询)
	 *  
	 * @param  tableInfoId		桌台id	
	 * @return DiningArea  
	 * @author litao
	 * @date 2018年5月17日
	 */
	DiningArea getDiningAreaById(Integer tableInfoId);

	/**
	 * 获取店铺桌台信息(根据桌台uid查询)
	 * 
	 * @param  uid				桌台uid
	 * @return DiningArea  
	 * @author litao
	 * @date 2018年5月17日
	 */
	DiningArea getDiningAreaByUid(String uid);

	/**
	 * 获取店铺扩展信息(店铺营业时间)
	 * 
	 * @param  storeId       子店铺id
	 * @return ShopperExtend  
	 * @author litao
	 * @date 2018年5月17日
	 */
	ShopperExtend getShopperExtendById(Integer storeId);

	/**
	 * 获取店铺公告信息
	 * @param  storeId		子店铺id
	 * @return ShopperNotice  
	 * @author litao
	 * @date 2018年5月17日
	 */
	ShopperNotice getShopperNoticeDetail(Integer storeId);

	/**
	 * 获取用户基本信息(根据支付宝用户id查询)
	 * @param  buyerId			支付宝用户id
	 * @param  source			用户来源
	 * @return ThirdUserInfo  
	 * @author litao
	 * @date 2018年5月17日
	 */
	ThirdUserInfo getThirdUserInfoBuyerId(String buyerId, Integer source);

	/**
	 * 获取口碑门店ID和merchant_pid
	 * 
	 * @param  storeId  		子店铺id
	 * @return Map<String,Object>  
	 * @author litao
	 * @date 2018年5月17日
	 */
	Map<String, Object> getAlipayShopIdByStoreId(Integer storeId);

	/**
	 * 获取会员基本信息(根据支付宝用户id查询)
	 * 
	 * @param buyerId			支付宝用户id
	 * @return MemberInfoVO
	 * @author litao
	 * @date 2017年12月21日
	 */
	MemberInfoVO getMemberUserInfo(String buyerId);

	/**
	 * 获取店铺优惠活动
	 * 
	 * @param shopId     口碑门店id
	 * @return List<ShopperActivities>
	 * @author litao
	 * @date 2017年12月25日
	 */
	List<ShopperActivities> getShopperActivityList(String shopId);

	/**
	 * 获取店铺呼叫服务信息
	 * 
	 * @param storeId			子店铺id
	 * @param tableInfoId		桌台id
	 * @return CoreResponse<CallServiceInfoCVO>
	 * @author litao
	 * @date 2018年1月2日
	 */
	CoreResponse<CallServiceInfoCVO> getShopperCallService(Integer storeId,Integer tableInfoId);

	/**
	 * 获取店铺秒付数据回流配置的主机id
	 * 
	 * @param storeId		子店铺id
	 * @return Long
	 * @author litao
	 * @date 2018年1月3日
	 */
	Long getHostMachineId(Integer storeId);

	/**
	 * 根据名称获取店铺配置
	 * 
	 * @param storeId
	 * @param propName
	 * @return Integer
	 * @author litao
	 * @date 2018年1月3日
	 */
	Integer findByPropName(Integer storeId, String propName);

	/**
	 * 获取承接端是否开启点餐
	 * 
	 * @param storeId
	 * @return CoreResponse<Map<String, Object>>
	 * @author litao
	 * @date 2018年1月15日
	 */
	CoreResponse<Map<String, Object>> getBusinessIsOrders(Integer storeId);

	/**
	 * 领取红包
	 * 
	 * @param buyerId
	 * @return CoreResponse<Map<String, Object>>
	 * @author litao
	 * @date 2018年1月22日
	 */
	CoreResponse<Map<String, Object>> getReceiveRedEvenlope(String buyerId);
	
	/**
	 * 根据主帐号Id查询是否开启扫码下单店铺装修
	 * 
	 * @param shopperId
	 * @param propName
	 * @return Integer
	 * @author yxy
	 * @date 2018年1月24日
	 */
	Integer findByShopperIdAndPropName(Integer shopperId, String propName);
	
	/**
	 * 获取扫码下单店铺装修默认配置信息
	 * @return Map
	 * @author yxy
	 * @date 2018年1月24日
	 */
	Map<String, Object> getShopperRenovationDefaultConfig(int decorationType);
	
	/**
	 * 查询是否有子帐号店铺使用扫码下单店铺装修风格
	 * 
	 * @param storeId
	 * @return List
	 * @author yxy
	 * @date 2018年1月24日
	 */
	List<Long> getShopperRenovationByStoreId(Integer storeId,int decorationType);
	
	/**
	 * 根据模板ID帐号查询扫码下单店铺装修风格
	 * 
	 * @param
	 * @return List
	 * @author yxy
	 * @date 2018年1月24日
	 */
	JSONObject getShopperRenovationByShopperId(Long configId,int decorationType);
	
	/**
	 * 获取店铺信息(包括店铺营业时间及店铺公告)
	 * 
	 * @param  storeId			子店铺id
	 * @param  nowDate			当前时间
	 * @return ShopperInfoVO  
	 * @author litao
	 * @date 2018年5月2日
	 */
	ShopperInfoVO getShopperInfo(Integer storeId,String nowDate);

	/**
	 * 获取店铺配置、桌台信息
	 * @param  storeId  		子店铺id
	 * @param  tableInfoId   	桌台id
	 * @author litao
	 * @date 2018年5月7日
	 */
	CoreResponse<ShopperInfoVO> getShopperInfoService(Integer storeId, Integer tableInfoId, String buyerId,
			Integer clientOrderMode);
	
	/**
	 * 获取店铺配置信息
	 * @param storeId
	 * @return ShopperConfigVO  
	 * @throws
	 * @author litao
	 * @date 2018年5月9日
	 */
	ShopperConfigExtend getShopperConfig(Integer storeId);
	
	/**
	 * 保存就餐人数
	 * @param savePeopleNum
	 */
	CoreResponse<Map<String,Object>> saveEatPeopleNum(SavePeopleNumVO savePeopleNum);
	
	/**
	 * 获取装修平台信息
	 * @param storeId
	 * @param shopperId
	 */
	CoreResponse<DecorationVO> getShopperDecorationInfo(Integer storeId, Integer shopperId,int decorationType);

	/**
	 * 调用支付宝营销抽奖活动触发抽奖接口获取红包
	 * @param telNumber
	 * @param userId
	 * @param loginId
	 * @param source
	 * @return
	 */
	CoreResponse<AlipayMarketingTriggerVO> getMarketingTrigger(String telNumber, String userId, String loginId, Integer source);

	/**
	 * 查询是否加菜是显示人数
	 * @param
	 * @return
	 */
	Map<String, Integer> getShowPeopleNumber(ShowPeopleNumberVO showPeopleNumber);

	/**
	 * 获取解析后的二维码信息
	 * @param storeId
	 * @param thirdUserInfoId
	 * @param url
	 * @param mode
	 */
	CoreResponse<QrcodeVO> getAnalyzeQrcodePath(Integer storeId, Long thirdUserInfoId, String url, Integer mode);
	
	/**
	 * 获取预约时间
	 * @param storeId
	 * @param shopId
	 * @param date
	 * @return
	 */
	CoreResponse<AppointmentTimeVO> getAppointmentTime(Integer storeId, Integer shopId, String date);
	
	/**
	 * 预约点餐验证状态
	 * @param date 
	 * @param storeId
	 * @param shopId
	 * @param date
	 * @param appointmentTime 
	 * @param reserveLatestTime 
	 * @return
	 */
	CoreResponse<String> appointmentVerification(ReserveBasicInfoVO reserveBasicInfoVO, String date);

	CoreResponse<EmployeeAuthRecordEntryVO> isExistEmployeeAuthRecord(Integer shopId, Integer storeId, String source, String appId, String buyerId, int i);

	void saveOrUpdateEmployeeAuthRecord(Integer employeeAuthId, Integer shopId, Integer storeId, Integer employeeId,
			String source, String appId, String buyerId);

	CoreResponse<FindEmployeeEntryVO> getShopEmployeeIdByMobile(Integer shopId, Integer storeId, String phone);

    boolean isEnjoyMemberPrice(UserBaseDto userBaseDto, ShopperConfigExtend shopperConfigExt);
}
